package cn.wizzer.app.crown.modules.services.order;

import cn.wizzer.app.crown.modules.models.CrownOrder;
import cn.wizzer.app.crown.modules.models.enums.SettleStatusEnum;
import cn.wizzer.app.crown.modules.models.vo.CrownOrderVO;
import cn.wizzer.framework.base.service.BaseService;
import cn.wizzer.framework.page.Pagination;

import java.math.BigDecimal;

import java.util.Map;

public interface CrownOrderService extends BaseService<CrownOrder> {


    /**
     * 后台投资记录
     * 需要 注意，加了统计方法，如果这个改了，searchSum也需要改
     *
     * @param userCnd       用户条件
     * @param orderCnd      订单条件
     * @param orderStatus   待结算、已结算、已取消等等
     * @param betType       全场波胆、半场波胆、全场总入球
     * @param matchStage    今日、明日、已结束、赛事异常
     * @param searchKeyword 搜索关键字
     * @param searchDate    搜索日期
     * @param pageNumber
     * @param pageSize
     * @return
     */
    Pagination listPage(String userCnd, String orderCnd, String orderStatus, String betType, String matchStage,
                        String searchKeyword, String[] searchDate, int pageNumber, int pageSize);

    /**
     * @param userCnd
     * @param orderCnd
     * @param orderStatus
     * @param betType
     * @param matchStage
     * @param searchKeyword
     * @param searchDate
     * @return
     */
    Map<String, BigDecimal> searchSum(String userCnd, String orderCnd, String orderStatus, String betType, String matchStage,
                                      String searchKeyword, String[] searchDate);

    /**
     * 投资
     *
     * @param appid
     * @param order
     * @param
     */
    void create(String appid, CrownOrder order);

    /**
     * 投注记录
     *
     * @param appid
     * @param orderType 订单类型(待结算、已结算、已取消)
     * @param startTime 查询指定日期的开始时间
     * @param endTime   查询指定日期的结束时间
     * @param pageNo
     * @param pageSize
     * @return
     */
    Pagination list(String appid, SettleStatusEnum orderType, Long startTime, Long endTime, int pageNo, int pageSize);


    /**
     * 自动结算
     */
    void settleAuto();

    /**
     * 手动结算
     *
     * @param orderId     订单ID
     * @param platformUid 操作人ID
     */
    void settleManual(String orderId, String platformUid);


    /**
     * 未结算金额统计、总交易笔数统计、昨日收益
     *
     * @param userId
     * @return
     */
    Map info(String userId);

    /**
     * 投资详情
     *
     * @param id
     * @return
     */
    CrownOrderVO detail(String id);

    /**
     * 查询出用户已结算订单的投资，类型为保本的
     *
     * @param userId
     * @return
     */
    BigDecimal searchSumPro(String userId);


    /**
     * 查询长时间没获取到的赛果的赛事，通知管理员
     */
    void noResultOrder();


    /**
     * 取消订单
     *
     * @param id
     */
    void cancel(String id);

    /**
     * 用户体验金收回
     *
     * @param userId
     */
    void takeBack(String userId);

    /**
     * 超过30天的处理
     *
     * @param userId
     */
    void takeBack30(String userId);

    /**
     * 体验金投资相关统计
     *
     * @param startDate
     * @param endDate
     */
    void expInvestStatistics(Long startDate, Long endDate);

    /**
     * 用户盈利报表
     *
     * @param userId
     * @param timezone
     * @param startTime
     * @param endTime
     * @param pageNumber
     * @param pageSize
     */
    Map<String,Object> userProfit(String userId, String timezone, Long startTime, Long endTime, int pageNumber, int pageSize);
}
